package com.ioi.core;

import com.ioi.base.Page;
import com.ioi.base.Q;

import java.util.List;

/**
 * SuperDao<T> DAO接口
 *
 * @author LILIBO
 * @since 2024/4/27
 */
public interface SuperDao<T> {

    /**
     * 添加
     *
     * @param entity 实体
     * @return 受影响的行数
     */
    int add(T entity);

    /**
     * 修改
     *
     * @param entity 实体
     * @return 受影响的行数
     */
    int upd(T entity);

    /**
     * 删除
     *
     * @param id 主键ID
     * @return 受影响的行数
     */
    int del(int id);

    /**
     * 查询
     *
     * @param query 查询条件
     * @return 列表
     */
    default List<T> list(Q... query) {
        String sql = "select b.*,p.name pubName from book b left join publisher p on b.pubId=p.id";
        return new BaseDao().executeQuery(null, sql);
    }

    /**
     * 分页查询
     *
     * @param pageIndex 分页起始下标（从0开始）
     * @param pageSize 页大小
     * @param query 查询条件
     * @return 分页数据
     */
    Page<T> page(int pageIndex, int pageSize, Q... query);

    /**
     * 分页查询
     *
     * @param page 分页对象
     * @param query 查询条件
     * @return 分页数据
     */
    Page<T> page(Page page, Q... query);

}
